package FrameWork.Skill;

/**
 * 技能模型
 * 其中与比例相关的用万分比表示
 * 技能施法的顺序：扣除施法消耗-->施法前摇prepare-->执行beforeSkills--->执行当前Skill的效果--->执行afterSkills
 * 注意beforeSkills和afterSkills没有施法前摇和消耗。这里用于技能原子的复用
 */
public class SkillModel {
    /**
     * 技能描述
     */
    private int skillId;
    private String skillName;
    private String skillDescription;
    /**
     * 技能使用条件
     */
    private int[] excludeSceneId;   //排除场景,null为不排除任何场景
    private int[] includeSceneId;   //包括场景，null表示所有场景
    private int[] equipmentId;      //需要装备的物品ID
    private int minLevel;			//最小等级限制
    private int maxLevel;           //最大等级限制
    private int[] profession;		//职业限制，null为没有限制
    private int maxDistance;		//最大施法距离
    private int minDistance;		//最小施法距离
    /**
     * 施法消耗
     */
    private int costHp;             //消耗HP
    private int costMp;             //消耗MP
    private int costGold;		    //消耗金币
    private int costExp;		    //消耗经验值
    private int costLevel;		    //消耗等级
    private int costHpRate;         //消耗HP比例
    private int costMpRate;         //消耗MP比例
    private int costExpRate;        //消耗经验值比例
    private int castLevelRate;      //消耗等级比例
    private int costGoodId[];       //消耗物品ID
    private int costGoodAmount[];   //消耗物品数量，与上面的ID一一对应

    /**
     * 法术属性
     */
    private int cd;                 //CD时间
    private int animation;          //动画ID
    private int delay;              //施法前摇时间
    private boolean isBuff;         //是否为buff
    private boolean canInterupt;    //能够被打断
    private int duration;			//持续时间，如果不是持续性技能设为0
    private int period;				//持续时间的单位周期，单位为毫秒
    private int distance;			//法术的距离，例如冲击波移动的距离或者范围技能的半径
    private boolean follow;			//是否跟随施法者，用于范围攻击
    private int possibility;		//法术成功施法的概率
    private int maxAffectAmount;	//最大影响个体数
    private int maxOverlay;			//最大叠加次数
    private boolean affectFriend;   //对友方是否有效
    private boolean affectArmy;     //对敌方是否有效
    /**
     * 法术效果
     */
    //位置相关
    private int toPosX;		        //向X方向移动
    private int toPosY;		        //向Y方向移动
    private int toPosZ;		        //向Z方向移动（悬空）
    //基础属性
    private int HpAdd;              //添加Hp值
    private int HpAddRate;          //添加Hp比例
    private int MpAdd;              //添加Mp值
    private int MpAddRate;          //添加Mp比例
    private int ExpAdd;             //添加Exp值
    private int ExpAddRate;         //添加Exp比例
    private int moneyAdd;           //添加金钱
    private int moneyAddRate;       //添加金钱比例
    private int defenseAdd;			 //防御添加
    private int defenseAddRate;     //防御添加比例
    private int missAdd;            //闪避添加
    private int missAddRate;        //闪避率添加
    private int transparency;  		//透明度，100为隐身
    private int CriticalHitRate;	//暴击率
    private int attackAdd;          //攻击力添加
    private int attackRateAdd;      //攻击比例添加
    private int moveSpeedAdd;       //添加移动速度
    private int moveSpeedRateAdd;   //移动速度添加比例
    //动作
    private boolean stopMove;		 //眩晕
    private boolean forbitCastSkill; //沉默
    private int appearance;			//外形，0为不变
    private int action;				//做出某种动作如跳舞
    //复合效果，这些技能都要是原子技能
    private int[] beforeExecuteSkills;		//在本技能施放前的复合技能
    private int[] afterExecuteSkills;      // 在本技能施放后的复合技能


    public int getSkillId() {
        return skillId;
    }

    public void setSkillId(int skillId) {
        this.skillId = skillId;
    }

    public String getSkillName() {
        return skillName;
    }

    public void setSkillName(String skillName) {
        this.skillName = skillName;
    }

    public String getSkillDescription() {
        return skillDescription;
    }

    public void setSkillDescription(String skillDescription) {
        this.skillDescription = skillDescription;
    }

    public int[] getExcludeSceneId() {
        return excludeSceneId;
    }

    public void setExcludeSceneId(int[] excludeSceneId) {
        this.excludeSceneId = excludeSceneId;
    }

    public int[] getIncludeSceneId() {
        return includeSceneId;
    }

    public void setIncludeSceneId(int[] includeSceneId) {
        this.includeSceneId = includeSceneId;
    }

    public int[] getEquipmentId() {
        return equipmentId;
    }

    public void setEquipmentId(int[] equipmentId) {
        this.equipmentId = equipmentId;
    }

    public int getMinLevel() {
        return minLevel;
    }

    public void setMinLevel(int minLevel) {
        this.minLevel = minLevel;
    }

    public int getMaxLevel() {
        return maxLevel;
    }

    public void setMaxLevel(int maxLevel) {
        this.maxLevel = maxLevel;
    }

    public int[] getProfession() {
        return profession;
    }

    public void setProfession(int[] profession) {
        this.profession = profession;
    }

    public int getMaxDistance() {
        return maxDistance;
    }

    public void setMaxDistance(int maxDistance) {
        this.maxDistance = maxDistance;
    }

    public int getMinDistance() {
        return minDistance;
    }

    public void setMinDistance(int minDistance) {
        this.minDistance = minDistance;
    }

    public int getCostHp() {
        return costHp;
    }

    public void setCostHp(int costHp) {
        this.costHp = costHp;
    }

    public int getCostMp() {
        return costMp;
    }

    public void setCostMp(int costMp) {
        this.costMp = costMp;
    }

    public int getCostGold() {
        return costGold;
    }

    public void setCostGold(int costGold) {
        this.costGold = costGold;
    }

    public int getCostExp() {
        return costExp;
    }

    public void setCostExp(int costExp) {
        this.costExp = costExp;
    }

    public int getCostLevel() {
        return costLevel;
    }

    public void setCostLevel(int costLevel) {
        this.costLevel = costLevel;
    }

    public int getCostHpRate() {
        return costHpRate;
    }

    public void setCostHpRate(int costHpRate) {
        this.costHpRate = costHpRate;
    }

    public int getCostMpRate() {
        return costMpRate;
    }

    public void setCostMpRate(int costMpRate) {
        this.costMpRate = costMpRate;
    }

    public int getCostExpRate() {
        return costExpRate;
    }

    public void setCostExpRate(int costExpRate) {
        this.costExpRate = costExpRate;
    }

    public int getCastLevelRate() {
        return castLevelRate;
    }

    public void setCastLevelRate(int castLevelRate) {
        this.castLevelRate = castLevelRate;
    }

    public int[] getCostGoodId() {
        return costGoodId;
    }

    public void setCostGoodId(int[] costGoodId) {
        this.costGoodId = costGoodId;
    }

    public int[] getCostGoodAmount() {
        return costGoodAmount;
    }

    public void setCostGoodAmount(int[] costGoodAmount) {
        this.costGoodAmount = costGoodAmount;
    }

    public int getAnimation() {
        return animation;
    }

    public void setAnimation(int animation) {
        this.animation = animation;
    }

    public int getDelay() {
        return delay;
    }

    public void setDelay(int delay) {
        this.delay = delay;
    }

    public int getDuration() {
        return duration;
    }

    public void setDuration(int duration) {
        this.duration = duration;
    }

    public int getPeriod() {
        return period;
    }

    public void setPeriod(int period) {
        this.period = period;
    }

    public int getDistance() {
        return distance;
    }

    public void setDistance(int distance) {
        this.distance = distance;
    }

    public boolean isFollow() {
        return follow;
    }

    public void setFollow(boolean follow) {
        this.follow = follow;
    }

    public int getPossibility() {
        return possibility;
    }

    public void setPossibility(int possibility) {
        this.possibility = possibility;
    }

    public int getMaxAffectAmount() {
        return maxAffectAmount;
    }

    public void setMaxAffectAmount(int maxAffectAmount) {
        this.maxAffectAmount = maxAffectAmount;
    }

    public int getMaxOverlay() {
        return maxOverlay;
    }

    public void setMaxOverlay(int maxOverlay) {
        this.maxOverlay = maxOverlay;
    }

    public boolean isAffectFriend() {
        return affectFriend;
    }

    public void setAffectFriend(boolean affectFriend) {
        this.affectFriend = affectFriend;
    }

    public boolean isAffectArmy() {
        return affectArmy;
    }

    public void setAffectArmy(boolean affectArmy) {
        this.affectArmy = affectArmy;
    }

    public int getToPosX() {
        return toPosX;
    }

    public void setToPosX(int toPosX) {
        this.toPosX = toPosX;
    }

    public int getToPosY() {
        return toPosY;
    }

    public void setToPosY(int toPosY) {
        this.toPosY = toPosY;
    }

    public int getToPosZ() {
        return toPosZ;
    }

    public void setToPosZ(int toPosZ) {
        this.toPosZ = toPosZ;
    }

    public int getHpAdd() {
        return HpAdd;
    }

    public void setHpAdd(int hpAdd) {
        HpAdd = hpAdd;
    }

    public int getHpAddRate() {
        return HpAddRate;
    }

    public void setHpAddRate(int hpAddRate) {
        HpAddRate = hpAddRate;
    }

    public int getMpAdd() {
        return MpAdd;
    }

    public void setMpAdd(int mpAdd) {
        MpAdd = mpAdd;
    }

    public int getMpAddRate() {
        return MpAddRate;
    }

    public void setMpAddRate(int mpAddRate) {
        MpAddRate = mpAddRate;
    }

    public int getExpAdd() {
        return ExpAdd;
    }

    public void setExpAdd(int expAdd) {
        ExpAdd = expAdd;
    }

    public int getExpAddRate() {
        return ExpAddRate;
    }

    public void setExpAddRate(int expAddRate) {
        ExpAddRate = expAddRate;
    }

    public int getMoneyAdd() {
        return moneyAdd;
    }

    public void setMoneyAdd(int moneyAdd) {
        this.moneyAdd = moneyAdd;
    }

    public int getMoneyAddRate() {
        return moneyAddRate;
    }

    public void setMoneyAddRate(int moneyAddRate) {
        this.moneyAddRate = moneyAddRate;
    }

    public int getDefenseAdd() {
        return defenseAdd;
    }

    public void setDefenseAdd(int defenseAdd) {
        this.defenseAdd = defenseAdd;
    }

    public int getDefenseAddRate() {
        return defenseAddRate;
    }

    public void setDefenseAddRate(int defenseAddRate) {
        this.defenseAddRate = defenseAddRate;
    }

    public int getTransparency() {
        return transparency;
    }

    public void setTransparency(int transparency) {
        this.transparency = transparency;
    }

    public int getCriticalHitRate() {
        return CriticalHitRate;
    }

    public void setCriticalHitRate(int criticalHitRate) {
        CriticalHitRate = criticalHitRate;
    }

    public int getAttackAdd() {
        return attackAdd;
    }

    public void setAttackAdd(int attackAdd) {
        this.attackAdd = attackAdd;
    }

    public int getAttackRateAdd() {
        return attackRateAdd;
    }

    public void setAttackRateAdd(int attackRateAdd) {
        this.attackRateAdd = attackRateAdd;
    }

    public int getMoveSpeedAdd() {
        return moveSpeedAdd;
    }

    public void setMoveSpeedAdd(int moveSpeedAdd) {
        this.moveSpeedAdd = moveSpeedAdd;
    }

    public int getMoveSpeedRateAdd() {
        return moveSpeedRateAdd;
    }

    public void setMoveSpeedRateAdd(int moveSpeedRateAdd) {
        this.moveSpeedRateAdd = moveSpeedRateAdd;
    }

    public boolean isStopMove() {
        return stopMove;
    }

    public void setStopMove(boolean stopMove) {
        this.stopMove = stopMove;
    }

    public boolean isForbitCastSkill() {
        return forbitCastSkill;
    }

    public void setForbitCastSkill(boolean forbitCastSkill) {
        this.forbitCastSkill = forbitCastSkill;
    }

    public int getAppearance() {
        return appearance;
    }

    public void setAppearance(int appearance) {
        this.appearance = appearance;
    }

    public int getAction() {
        return action;
    }

    public void setAction(int action) {
        this.action = action;
    }

    public int[] getBeforeExecuteSkills() {
        return beforeExecuteSkills;
    }

    public void setBeforeExecuteSkills(int[] beforeExecuteSkills) {
        this.beforeExecuteSkills = beforeExecuteSkills;
    }

    public int[] getAfterExecuteSkills() {
        return afterExecuteSkills;
    }

    public void setAfterExecuteSkills(int[] afterExecuteSkills) {
        this.afterExecuteSkills = afterExecuteSkills;
    }

    public int getCd() {
        return cd;
    }

    public void setCd(int cd) {
        this.cd = cd;
    }

    public boolean isBuff() {
        return isBuff;
    }

    public void setBuff(boolean buff) {
        isBuff = buff;
    }

    public boolean isCanInterupt() {
        return canInterupt;
    }

    public void setCanInterupt(boolean canInterupt) {
        this.canInterupt = canInterupt;
    }

    public int getMissAdd() {
        return missAdd;
    }

    public void setMissAdd(int missAdd) {
        this.missAdd = missAdd;
    }

    public int getMissAddRate() {
        return missAddRate;
    }

    public void setMissAddRate(int missAddRate) {
        this.missAddRate = missAddRate;
    }
}
